#ifndef _BLE_H_
#define _BLE_H_




/* set BLE TX power */
#define	BLE_TX_POWER_3dbm	10
#define	BLE_TX_POWER0dbm	18
#define	BLE_TX_POWER1dbm	21
#define	BLE_TX_POWER2dbm	25
#define	BLE_TX_POWER3dbm	30

#define BLE_TX_POWER    BLE_TX_POWER0dbm


#define CNT_RC_1MS        32UL
#define CNT_ADV_INTERV    (CNT_RC_1MS*100)  /*interval max=0xffffff, ~524s or 8.7m*/


#define POWER_SAVE_SLEEP   0
#define POWER_SAVE_STANDBY 1

#define POWER_SAVE_OPT   1

//INT
//#define INT_TYPE_WAKEUP   	0x20
//#define INT_TYPE_SLEEP    	0x10

/*-------------------------------BLE register---------------------------------*/
//TX Data Payload maxLen 31 Bytes
#define R_TX_PAYLOAD 0xE0
#define W_TX_PAYLOAD 0xE1

#define CONFIG         0x00
#define CONT_TEST_MODE 0x01
#define WAKEUP_NOW     0x02
#define ADV_PKT_CFG    0x03
#define BLE_ADVA       0x04
#define ADV_INTERV_RC_CFG  0x13
#define BASEBAND_CFG       0x14
#define XO_PD_EN           0x18
//Chip ok
#define CHIP_READY    0x18
#define INT_MASK      0x1C
#define INT_FLAG      0x1D
#define IC_VER        0x1E
#define RESET_BB      0x21
#define XO_WAIT       0x25
#define PA_CFG        0x2F
#define BG_CAL        0x33
#define XO_SET        0x34
#define ABUS_ACC      0x37

/*-------------------------------BLE register  End----------------------------*/

/*
15:8:	Pdu length
7:0:	Pdu type
*/
#define ADV_IND            0
#define ADV_DIRECT_IND     1
#define ADV_NONCONN_IND    2
//#define ADV_SCAN_REQ       3
//#define ADV_SCAN_RSP       4
//#define ADV_CONN_REQ       5
#define ADV_SCAN_IND       6

//0x40: Random, 0x00: Public
#define ADV_TXADD_PUBLIC   0x00
#define ADV_TXADD_RANDOM   0x40


//Nordic SDK GAP  AD_TYPE
#define BLE_GAP_AD_TYPE_FLAGS                               0x01 /**< Flags for discoverability. */
#define BLE_GAP_AD_TYPE_16BIT_SERVICE_UUID_MORE_AVAILABLE   0x02 /**< Partial list of 16 bit service UUIDs. */
#define BLE_GAP_AD_TYPE_16BIT_SERVICE_UUID_COMPLETE         0x03 /**< Complete list of 16 bit service UUIDs. */
#define BLE_GAP_AD_TYPE_32BIT_SERVICE_UUID_MORE_AVAILABLE   0x04 /**< Partial list of 32 bit service UUIDs. */
#define BLE_GAP_AD_TYPE_32BIT_SERVICE_UUID_COMPLETE         0x05 /**< Complete list of 32 bit service UUIDs. */
#define BLE_GAP_AD_TYPE_128BIT_SERVICE_UUID_MORE_AVAILABLE  0x06 /**< Partial list of 128 bit service UUIDs. */
#define BLE_GAP_AD_TYPE_128BIT_SERVICE_UUID_COMPLETE        0x07 /**< Complete list of 128 bit service UUIDs. */
#define BLE_GAP_AD_TYPE_SHORT_LOCAL_NAME                    0x08 /**< Short local device name. */
#define BLE_GAP_AD_TYPE_COMPLETE_LOCAL_NAME                 0x09 /**< Complete local device name. */
#define BLE_GAP_AD_TYPE_TX_POWER_LEVEL                      0x0A /**< Transmit power level. */
#define BLE_GAP_AD_TYPE_CLASS_OF_DEVICE                     0x0D /**< Class of device. */
#define BLE_GAP_AD_TYPE_SIMPLE_PAIRING_HASH_C               0x0E /**< Simple Pairing Hash C. */
#define BLE_GAP_AD_TYPE_SIMPLE_PAIRING_RANDOMIZER_R         0x0F /**< Simple Pairing Randomizer R. */
#define BLE_GAP_AD_TYPE_SECURITY_MANAGER_TK_VALUE           0x10 /**< Security Manager TK Value. */
#define BLE_GAP_AD_TYPE_SECURITY_MANAGER_OOB_FLAGS          0x11 /**< Security Manager Out Of Band Flags. */
#define BLE_GAP_AD_TYPE_SLAVE_CONNECTION_INTERVAL_RANGE     0x12 /**< Slave Connection Interval Range. */
#define BLE_GAP_AD_TYPE_SOLICITED_SERVICE_UUIDS_16BIT       0x14 /**< List of 16-bit Service Solicitation UUIDs. */
#define BLE_GAP_AD_TYPE_SOLICITED_SERVICE_UUIDS_128BIT      0x15 /**< List of 128-bit Service Solicitation UUIDs. */
#define BLE_GAP_AD_TYPE_SERVICE_DATA                        0x16 /**< Service Data - 16-bit UUID. */
#define BLE_GAP_AD_TYPE_PUBLIC_TARGET_ADDRESS               0x17 /**< Public Target Address. */
#define BLE_GAP_AD_TYPE_RANDOM_TARGET_ADDRESS               0x18 /**< Random Target Address. */
#define BLE_GAP_AD_TYPE_APPEARANCE                          0x19 /**< Appearance. */
#define BLE_GAP_AD_TYPE_ADVERTISING_INTERVAL                0x1A /**< Advertising Interval. */
#define BLE_GAP_AD_TYPE_LE_BLUETOOTH_DEVICE_ADDRESS         0x1B /**< LE Bluetooth Device Address. */
#define BLE_GAP_AD_TYPE_LE_ROLE                             0x1C /**< LE Role. */
#define BLE_GAP_AD_TYPE_SIMPLE_PAIRING_HASH_C256            0x1D /**< Simple Pairing Hash C-256. */
#define BLE_GAP_AD_TYPE_SIMPLE_PAIRING_RANDOMIZER_R256      0x1E /**< Simple Pairing Randomizer R-256. */
#define BLE_GAP_AD_TYPE_SERVICE_DATA_32BIT_UUID             0x20 /**< Service Data - 32-bit UUID. */
#define BLE_GAP_AD_TYPE_SERVICE_DATA_128BIT_UUID            0x21 /**< Service Data - 128-bit UUID. */
#define BLE_GAP_AD_TYPE_3D_INFORMATION_DATA                 0x3D /**< 3D Information Data. */
#define BLE_GAP_AD_TYPE_MANUFACTURER_SPECIFIC_DATA          0xFF /**< Manufacturer Specific Data. */


#define GAP_ADTYPE_FLAGS_LIMITED                			0x01 //!< Discovery Mode: LE Limited Discoverable Mode
#define GAP_ADTYPE_FLAGS_GENERAL                			0x02 //!< Discovery Mode: LE General Discoverable Mode
#define GAP_ADTYPE_FLAGS_BREDR_NOT_SUPPORTED    			0x04 //!< Discovery Mode: BR/EDR Not Supported


extern void BLE_Init(void);
extern void BLE_TX(void);
extern void BLE_Mode_Sleep(void);
extern void BLE_Mode_Stdby(void);


extern void SRCC_CarrierTest(unsigned char chan);
extern void SRRC_PRBS9Test(unsigned char chan, unsigned char pkt_pld, unsigned char pkt_len);

#endif

